<!DOCTYPE html>


  <html class="light page-post">


<head>
  <meta charset="utf-8">
  
  <title>Android 测试支持库介绍 | 东窗随笔</title>

  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

  
    <meta name="keywords" content="Android测试," />
  

  <meta name="description" content="Android Testing support Library &amp;#x63D0;&amp;#x4F9B;&amp;#x4E86;&amp;#x4E00;&amp;#x4E2A;&amp;#x5F3A;&amp;#x5927;&amp;#x7684;Android &amp;#x5E94;&amp;#x7528;&amp;#x6D4B;&amp;#x8BD5;&amp;#x6846;&amp;#x67B6;&amp;#x3002; library&amp;#x63D0;&amp;#x4F9B;&amp;#x4E86;&amp;#x4E00;">
<meta property="og:type" content="article">
<meta property="og:title" content="Android 测试支持库介绍">
<meta property="og:url" content="http://hanlyjiang.github.io/2016/08/03/Android测试支持库01/index.html">
<meta property="og:site_name" content="东窗随笔">
<meta property="og:description" content="Android Testing support Library &amp;#x63D0;&amp;#x4F9B;&amp;#x4E86;&amp;#x4E00;&amp;#x4E2A;&amp;#x5F3A;&amp;#x5927;&amp;#x7684;Android &amp;#x5E94;&amp;#x7528;&amp;#x6D4B;&amp;#x8BD5;&amp;#x6846;&amp;#x67B6;&amp;#x3002; library&amp;#x63D0;&amp;#x4F9B;&amp;#x4E86;&amp;#x4E00;">
<meta property="og:updated_time" content="2016-12-08T10:13:52.796Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Android 测试支持库介绍">
<meta name="twitter:description" content="Android Testing support Library &amp;#x63D0;&amp;#x4F9B;&amp;#x4E86;&amp;#x4E00;&amp;#x4E2A;&amp;#x5F3A;&amp;#x5927;&amp;#x7684;Android &amp;#x5E94;&amp;#x7528;&amp;#x6D4B;&amp;#x8BD5;&amp;#x6846;&amp;#x67B6;&amp;#x3002; library&amp;#x63D0;&amp;#x4F9B;&amp;#x4E86;&amp;#x4E00;">

  

  
    <link rel="icon" href="/favicon.ico">
  

  <link href="/css/styles.css?v=d671a41f" rel="stylesheet">


  
    <link rel="stylesheet" href="/css/personal-style.css">
  

  

  
  <script type="text/javascript">
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "//hm.baidu.com/hm.js?57e94d016e201fba3603a8a2b0263af0";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
  </script>



  
    <script async src="https://dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script>
  

  
    <link rel="stylesheet" href="//cdn.bootcss.com/font-awesome/4.3.0/css/font-awesome.min.css">
  
</head>

<body>


  
    <span id="toolbox-mobile" class="toolbox-mobile">观乎</span>
  

  <div class="post-header CENTER">
   
  <div class="toolbox">
    <a class="toolbox-entry" href="/">
      <span class="toolbox-entry-text">观乎</span>
      <i class="icon-angle-down"></i>
      <i class="icon-home"></i>
    </a>
    <ul class="list-toolbox">
      
        <li class="item-toolbox">
          <a
            class="ROUND_RECT"
            href="/archives/"
            rel="noopener noreferrer"
            target="_self"
            >
            博客
          </a>
        </li>
      
        <li class="item-toolbox">
          <a
            class="ROUND_RECT"
            href="/category/"
            rel="noopener noreferrer"
            target="_self"
            >
            分类
          </a>
        </li>
      
        <li class="item-toolbox">
          <a
            class="ROUND_RECT"
            href="/tag/"
            rel="noopener noreferrer"
            target="_self"
            >
            标签
          </a>
        </li>
      
        <li class="item-toolbox">
          <a
            class="ROUND_RECT"
            href="/about/"
            rel="noopener noreferrer"
            target="_self"
            >
            关于
          </a>
        </li>
      
        <li class="item-toolbox">
          <a
            class="ROUND_RECT"
            href="/atom.xml"
            rel="noopener noreferrer"
            target="_blank"
            >
            RSS
          </a>
        </li>
      
        <li class="item-toolbox">
          <a
            class="ROUND_RECT"
            href="/search/"
            rel="noopener noreferrer"
            target="_self"
            >
            搜索
          </a>
        </li>
      
    </ul>
  </div>


</div>


  <div id="toc" class="toc-article">
    <strong class="toc-title">文章目录</strong>
    <ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#测试支持库-的-特性说明"><span class="toc-text">测试支持库 的 特性说明</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#junit-支持"><span class="toc-text">JUnit 支持</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#访问instrumentation-信息"><span class="toc-text">访问instrumentation 信息</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#测试过滤test-filtering"><span class="toc-text">测试过滤（Test filtering）</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#测试分片-test-sharding"><span class="toc-text">测试分片 (Test sharding)</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#espresso-框架"><span class="toc-text">Espresso 框架</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#view-matching"><span class="toc-text">View matching</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#adapter-matching-适配器匹配"><span class="toc-text">Adapter matching - 适配器匹配</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#action-apis"><span class="toc-text">Action APIs</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#ui-线程同步"><span class="toc-text">UI 线程同步</span></a></li></ol></li></ol></li></ol>
  </div>



<div class="content content-post CENTER">
   <article id="post-Android测试支持库01" class="article article-type-post" itemprop="blogPost">
  <header class="article-header">
    <h1 class="post-title">Android 测试支持库介绍</h1>

    <div class="article-meta">
      <span>
        <i class="icon-calendar"></i>
        <span>2016.08.03</span>
      </span>

      
        <span class="article-author">
          <i class="icon-user"></i>
          <span>hanlyjiang@outlook.com</span>
        </span>
      

      
  <span class="article-category">
    <i class="icon-list"></i>
    <a class="article-category-link" href="/categories/Android/">Android</a> / <a class="article-category-link" href="/categories/Android/测试/">测试</a>
  </span>



      
        <span>
          <i class="icon-comment"></i>
          <a href="http://hanlyjiang.site/2016/08/03/Android测试支持库01/#disqus_thread"></a>
        </span>
      

      
      <i class="fa fa-eye"></i> 
        <span id="busuanzi_container_page_pv">
           &nbsp热度 <span id="busuanzi_value_page_pv">
           <i class="fa fa-spinner fa-spin"></i></span>℃
        </span>
      

      
      
    </div>
  </header>

  <div class="article-content">
    
      <p>Android Testing support Library &#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x4E2A;&#x5F3A;&#x5927;&#x7684;Android &#x5E94;&#x7528;&#x6D4B;&#x8BD5;&#x6846;&#x67B6;&#x3002; library&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x7CFB;&#x5217;&#x7528;&#x4EE5;&#x5FEB;&#x901F;&#x5EFA;&#x7ACB;&#x548C;&#x8FD0;&#x884C;&#x6D4B;&#x8BD5;&#x4EE3;&#x7801;&#x7684;APIs&#xFF0C;&#x5305;&#x62EC;Junit4 &#x548C; &#x529F;&#x80FD;&#x6027;UI&#x6D4B;&#x8BD5;&#x3002;&#x652F;&#x6301;&#x4ECE;IDE&#x6216;&#x8005;&#x547D;&#x4EE4;&#x884C;&#x6765;&#x4F7F;&#x7528;&#x8FD9;&#x4E9B;APIs&#x3002;</p>
<a id="more"></a>
<p>&#x83B7;&#x53D6;&#xFF1A; &#x901A;&#x8FC7;Android SDK Manager &#xFF08;<a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#setup" target="_blank" rel="external">Testing Support Library Setup</a>&#xFF09;</p>
<p>&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x7684;&#x4E3B;&#x8981;&#x5185;&#x5BB9;&#xFF1A;</p>
<ul>
<li>&#x8BF4;&#x660E;&#x4E86;Android Testing Support Library &#x63D0;&#x4F9B;&#x4E86;&#x54EA;&#x4E9B;&#x5DE5;&#x5177;&#x7528;&#x4EE5;&#x6D4B;&#x8BD5;</li>
<li>&#x5982;&#x4F55;&#x5728;&#x4F60;&#x7684;&#x6D4B;&#x8BD5;&#x73AF;&#x5883;&#x4E2D;&#x4F7F;&#x7528;AndroidTestRunner</li>
<li>&#x5173;&#x4E8E;&#x652F;&#x6301;&#x5E93;&#x7684;&#x53D1;&#x5E03;&#x4FE1;&#x606F;</li>
</ul>
<h2 id="&#x6D4B;&#x8BD5;&#x652F;&#x6301;&#x5E93;-&#x7684;-&#x7279;&#x6027;&#x8BF4;&#x660E;"><a href="#&#x6D4B;&#x8BD5;&#x652F;&#x6301;&#x5E93;-&#x7684;-&#x7279;&#x6027;&#x8BF4;&#x660E;" class="headerlink" title="&#x6D4B;&#x8BD5;&#x652F;&#x6301;&#x5E93; &#x7684; &#x7279;&#x6027;&#x8BF4;&#x660E;"></a>&#x6D4B;&#x8BD5;&#x652F;&#x6301;&#x5E93; &#x7684; &#x7279;&#x6027;&#x8BF4;&#x660E;</h2><p>Android &#x6D4B;&#x8BD5;&#x652F;&#x6301;&#x5E93;&#x5305;&#x542B;&#x4EE5;&#x4E0B;&#x81EA;&#x52A8;&#x5316;&#x6D4B;&#x8BD5;&#x5DE5;&#x5177;&#xFF1A;</p>
<ul>
<li><strong><a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#AndroidJUnitRunner" target="_blank" rel="external">AndroidJUnitRunner</a></strong>: Android &#x4E0A;&#x4F7F;&#x7528;&#x7684;&#x517C;&#x5BB9;Junit4 &#x7684;Test Runner</li>
<li><strong><a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#Espresso" target="_blank" rel="external">Espresso</a></strong>: UI&#x6D4B;&#x8BD5;&#x6846;&#x67B6;&#xFF1B;&#x9002;&#x7528;&#x4E8E;&#x5E94;&#x7528;&#x5185;&#x529F;&#x80FD;&#x6027;UI&#x6D4B;&#x8BD5;&#xFF08;functional UI testing&#xFF09;</li>
<li><strong><a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#UIAutomator" target="_blank" rel="external">UI Automator</a></strong>: UI&#x6D4B;&#x8BD5;&#x6846;&#x67B6;&#xFF1B;&#x9002;&#x7528;&#x4E8E;&#x8DE8;APP &#x7684;&#x529F;&#x80FD;&#x6027;UI&#x6D4B;&#x8BD5;&#xFF0C;&#x8DE8;&#x8D8A;&#x7684;APP&#x65E2;&#x53EF;&#x4EE5;&#x662F;&#x7B2C;&#x4E09;&#x65B9;APP&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x662F;&#x7CFB;&#x7EDF;APP</li>
</ul>
<p>###AndroidJUnitRunner    </p>
<p> <a href="https://developer.android.com/reference/android/support/test/runner/AndroidJUnitRunner.html" target="_blank" rel="external">AndroidJUnitRunner
</a> &#x7C7B;&#x662F;&#x4E00;&#x4E2A; <a href="http://junit.org/" target="_blank" rel="external">JUnit</a> &#x6D4B;&#x8BD5;Runner&#xFF0C;&#x5B83;&#x5141;&#x8BB8;&#x4F60;&#x5728;Android &#x8BBE;&#x5907;&#x4E0A;&#x8FD0;&#x884C;JUnit4 &#x6216;JUnit3 &#x98CE;&#x683C;&#x7684;&#x6D4B;&#x8BD5;&#x7C7B;&#xFF0C;&#x8FD9;&#x4E9B;&#x6D4B;&#x8BD5;&#x7C7B;&#x540C;&#x65F6;&#x4E5F;&#x5305;&#x542B;&#x90A3;&#x4E9B;&#x4F7F;&#x7528;<a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#Espresso" target="_blank" rel="external">Espresso</a> &#x548C; <a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#UIAutomator" target="_blank" rel="external">UI Automator</a>  &#x6D4B;&#x8BD5;&#x6846;&#x67B6;&#x5EFA;&#x7ACB;&#x7684;&#x6D4B;&#x8BD5;&#x7C7B;&#x3002; AndroidJUnitTestRunner &#x80FD;&#x5B89;&#x88C5;&#x6D4B;&#x8BD5;&#x5305;&#x548C;&#x88AB;&#x6D4B;APP &#x5230;&#x8BBE;&#x5907;&#xFF0C;&#x5E76;&#x4E14;&#x8FD0;&#x884C;&#x6D4B;&#x8BD5;&#xFF0C;&#x62A5;&#x544A;&#x6D4B;&#x8BD5;&#x7ED3;&#x679C;&#x3002;&#x73B0;&#x5728;AndroidJUnitTestRunner  &#x5DF2;&#x7ECF;&#x53D6;&#x4EE3;&#x4E86;&#x53EA;&#x652F;&#x6301;Junit3&#x6D4B;&#x8BD5;&#x7684;<a href="https://developer.android.com/reference/android/test/InstrumentationTestRunner.html" target="_blank" rel="external">InstrumentationTestRunner</a> &#x7684;&#x6D4B;&#x8BD5;&#x7C7B;&#x3002;</p>
<p>AndroidJUnitTestRunner&#x7684;&#x4E3B;&#x8981;&#x529F;&#x80FD;&#x5305;&#x62EC;&#xFF1A;</p>
<ul>
<li><a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#ajur-junit" target="_blank" rel="external">JUnit support - Junit&#x652F;&#x6301;</a></li>
<li><a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#ajur-instrumentation" target="_blank" rel="external">Access to instrumentation information - &#x83B7;&#x53D6; Instrumention&#x4FE1;&#x606F;</a></li>
<li><a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#ajur-filtering" target="_blank" rel="external">Test filtering - &#x6D4B;&#x8BD5;&#x8FC7;&#x6EE4;</a></li>
<li><a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#ajur-sharding" target="_blank" rel="external">Test sharding - &#x6D4B;&#x8BD5;&#x5206;&#x7247;</a></li>
</ul>
<p>&#x6CE8;&#xFF1A; AndroidJUnitTestRunner &#x8981;&#x6C42;Android2.2&#xFF08;API level 8&#xFF09; &#x6216;&#x8005;&#x66F4;&#x9AD8;&#x7EA7;&#x522B;</p>
<h4 id="junit-&#x652F;&#x6301;"><a href="#JUnit-&#x652F;&#x6301;" class="headerlink" title="JUnit &#x652F;&#x6301;"></a>JUnit &#x652F;&#x6301;</h4><p>AndroidJUnitTestRunner&#x517C;&#x5BB9;JUnit3&#x548C;JUnit4&#x6D4B;&#x8BD5;&#xFF08;&#x6700;&#x9AD8;&#x652F;&#x6301;&#x5230;4.10&#xFF09;&#x3002;&#x4F46;&#x662F;&#xFF0C;&#x4F60;&#x6700;&#x597D;&#x907F;&#x514D;&#x5C06;JUnit3 &#x548C; JUnit4 &#x7684;&#x6D4B;&#x8BD5;&#x4EE3;&#x7801;&#x653E;&#x5728;&#x540C;&#x4E00;&#x4E2A;&#x5305;&#x4E0B;&#x9762;&#xFF0C;&#x8FD9;&#x5C06;&#x4F1A;&#x5BFC;&#x81F4;&#x4E0D;&#x53EF;&#x9884;&#x671F;&#x7684;&#x7ED3;&#x679C;&#x3002;<strong>&#x6CE8;&#x610F;</strong>&#x5982;&#x679C;&#x4F60;&#x6B63;&#x5728;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;Instrumented JUnit4 &#x6D4B;&#x8BD5;&#x7C7B;&#xFF0C;&#x90A3;&#x4E48;&#x4F60;&#x5FC5;&#x987B;&#x5728;&#x6D4B;&#x8BD5;&#x7C7B;&#x4E0A;&#x4F7F;&#x7528;<code>@RunWith(AndroidJUnit4.class)</code>&#x6CE8;&#x89E3;&#x3002;</p>
<p>&#x4E0B;&#x9762;&#x7684;&#x4EE3;&#x7801;&#x7247;&#x6BB5;&#x5C55;&#x793A;&#x4E86;&#x4E00;&#x4E2A;&#x4F7F;&#x7528;JUnit4 &#x98CE;&#x683C;&#x7684;Instrumented &#x6D4B;&#x8BD5;&#x6765;&#x9A8C;&#x8BC1;CalculatorActivity &#x7684; <em>add</em> &#x65B9;&#x6CD5;&#x662F;&#x5426;&#x6B63;&#x5E38;&#x8FD0;&#x884C;&#x3002;</p>
<pre><code>import android.support.test.runner.AndroidJUnit4;
import android.support.test.runner.AndroidJUnitRunner;
import android.test.ActivityInstrumentationTestCase2;

@RunWith(AndroidJUnit4.class)
public class CalculatorInstrumentationTest
        extends ActivityInstrumentationTestCase2&lt;CalculatorActivity&gt; {

    @Before
    public void setUp() throws Exception {
        super.setUp();

        // Injecting the Instrumentation instance is required
        // for your test to run with AndroidJUnitRunner.
        injectInstrumentation(InstrumentationRegistry.getInstrumentation());
        mActivity = getActivity();
    }

    @Test
    public void typeOperandsAndPerformAddOperation() {
        // Call the CalculatorActivity add() method and pass in some operand values, then
        // check that the expected value is returned.
    }

    @After
    public void tearDown() throws Exception {
        super.tearDown();
    }
}
</code></pre><h4 id="&#x8BBF;&#x95EE;instrumentation-&#x4FE1;&#x606F;"><a href="#&#x8BBF;&#x95EE;instrumentation-&#x4FE1;&#x606F;" class="headerlink" title="&#x8BBF;&#x95EE;instrumentation &#x4FE1;&#x606F;"></a>&#x8BBF;&#x95EE;instrumentation &#x4FE1;&#x606F;</h4><p>&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; <a href="https://developer.android.com/reference/android/support/test/InstrumentationRegistry.html" target="_blank" rel="external">InstrumentationRegistry</a> &#x7C7B;&#x6765;&#x83B7;&#x53D6;&#x548C;&#x4F60;&#x8FD0;&#x884C;&#x7684;&#x6D4B;&#x8BD5;&#x6709;&#x5173;&#x7684;&#x4FE1;&#x606F;&#x3002; &#x8FD9;&#x4E2A;&#x7C7B;&#x5305;&#x542B;  <a href="https://developer.android.com/reference/android/app/Instrumentation.html" target="_blank" rel="external">Instrumentation</a><br>  &#x5BF9;&#x8C61;&#x3001;&#x76EE;&#x6807;App &#x7684; <a href="https://developer.android.com/reference/android/content/Context.html" title="Context" target="_blank" rel="external">Context</a> &#x5BF9;&#x8C61;&#x3001;&#x6D4B;&#x8BD5;App &#x7684;<a href="https://developer.android.com/reference/android/content/Context.html" title="Context" target="_blank" rel="external">Context</a>&#x4EE5;&#x53CA;&#x4F20;&#x9012;&#x5230;&#x4F60;&#x7684;&#x6D4B;&#x8BD5;&#x7684;&#x547D;&#x4EE4;&#x884C;&#x53C2;&#x6570;&#x3002; &#x5F53;&#x4F60;&#x4F7F;&#x7528;UI Automator &#x6846;&#x67B6;&#x7F16;&#x5199;&#x4F9D;&#x8D56;&#x4E8E;<a href="https://developer.android.com/reference/android/app/Instrumentation.html" target="_blank" rel="external">Instrumentation</a> &#x6216;&#x8005; <a href="https://developer.android.com/reference/android/content/Context.html" title="Context" target="_blank" rel="external">Context</a> &#x5BF9;&#x8C61;&#x7684;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#x65F6;&#xFF0C;&#x8FD9;&#x4E9B;&#x4FE1;&#x606F;&#x5C06;&#x4F1A;&#x975E;&#x5E38;&#x6709;&#x7528;&#x3002;</p>
<h4 id="&#x6D4B;&#x8BD5;&#x8FC7;&#x6EE4;test-filtering"><a href="#&#x6D4B;&#x8BD5;&#x8FC7;&#x6EE4;&#xFF08;Test-filtering&#xFF09;" class="headerlink" title="&#x6D4B;&#x8BD5;&#x8FC7;&#x6EE4;&#xFF08;Test filtering&#xFF09;"></a>&#x6D4B;&#x8BD5;&#x8FC7;&#x6EE4;&#xFF08;Test filtering&#xFF09;</h4><p>&#x5728;&#x4F60;&#x7684;JUnit 4.x &#x7684;&#x6D4B;&#x8BD5;&#x4E2D;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x4E00;&#x4E9B;&#x6CE8;&#x89E3;&#x6765;&#x914D;&#x7F6E;&#x8FD0;&#x884C;&#x7684;&#x6D4B;&#x8BD5;&#x3002; &#x8FD9;&#x4E9B;&#x529F;&#x80FD;&#x53EF;&#x4EE5;&#x6700;&#x5927;&#x9650;&#x5EA6;&#x7684;&#x51CF;&#x5C11;&#x4F60;&#x5F80;&#x6D4B;&#x8BD5;&#x4EE3;&#x7801;&#x4E2D;&#x6DFB;&#x52A0;&#x6A21;&#x677F;&#x548C;&#x6761;&#x4EF6;&#x4EE3;&#x7801;&#x7684;&#x5DE5;&#x4F5C;&#x91CF;&#x3002; &#x5728;&#x6807;&#x51C6;&#x7684;JUnit 4 &#x6CE8;&#x89E3;&#x4E4B;&#x5916;&#xFF0C;AndroidJUnitTestRunner &#x8FD8;&#x652F;&#x6301;&#x4EE5;&#x4E0B;Android&#x7279;&#x6709;&#x7684;&#x6CE8;&#x89E3;&#xFF1A;</p>
<ul>
<li><a href="https://developer.android.com/reference/android/support/test/filters/RequiresDevice.html" target="_blank" rel="external">@RequiresDevice</a>: &#x6307;&#x5B9A;&#x6539;&#x6D4B;&#x8BD5;&#x53EA;&#x5728;&#x7269;&#x7406;&#x8BBE;&#x5907;&#x4E0A;&#x8FD0;&#x884C;&#xFF08;&#x800C;&#x4E0D;&#x662F;&#x6A21;&#x62DF;&#x5668;&#xFF09;</li>
<li><a href="https://developer.android.com/reference/android/support/test/filters/SdkSuppress.html" target="_blank" rel="external">@SdkSupress</a>: &#x7981;&#x6B62;&#x6D4B;&#x8BD5;&#x5728;&#x4F4E;&#x4E8E;&#x7ED9;&#x5B9A;API &#x7EA7;&#x522B;&#x7684;&#x8BBE;&#x5907;&#x4E0A;&#x8FD0;&#x884C;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x7981;&#x6B62;&#x8FD0;&#x884C;&#x5728;API level&#x4F4E;&#x4E8E;18 &#x7684;&#x8BBE;&#x5907;&#x4E0A;&#x8FD0;&#x884C;&#x65F6;&#x53EF;&#x4EE5;&#x4F60;&#x5199; <code>SDKSupress(minSdkVersion=18)</code></li>
</ul>
<h4 id="&#x6D4B;&#x8BD5;&#x5206;&#x7247;-test-sharding"><a href="#&#x6D4B;&#x8BD5;&#x5206;&#x7247;-Test-sharding" class="headerlink" title="&#x6D4B;&#x8BD5;&#x5206;&#x7247; (Test sharding)"></a>&#x6D4B;&#x8BD5;&#x5206;&#x7247; (Test sharding)</h4><p>AndroidJUnitTestRunner &#x652F;&#x6301;&#x5C06;&#x4E00;&#x4E2A;&#x6D4B;&#x8BD5;&#x5957;&#x4EF6;&#xFF08;test suite&#xFF09; &#x5206;&#x5272;&#x6210;&#x591A;&#x4E2A;&#x6D4B;&#x8BD5;&#x7247;&#xFF0C;&#x8FD9;&#x6837;&#x4F60;&#x5C31;&#x53EF;&#x4EE5;&#x5C06;&#x5C5E;&#x4E8E;&#x540C;&#x4E00;&#x4E2A;&#x6D4B;&#x8BD5;&#x7247;&#x7684;&#x6D4B;&#x8BD5;&#x5F53;&#x505A;&#x4E00;&#x4E2A;&#x7EC4;&#x4E00;&#x8D77;&#x8FD0;&#x884C;&#xFF0C; &#x5F53;&#x7136;&#xFF0C;&#x8FD9;&#x4E9B;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#x5FC5;&#x987B;&#x5728;&#x540C;&#x4E00;&#x4E2A;<a href="https://developer.android.com/reference/android/app/Instrumentation.html" target="_blank" rel="external">Instrumentation</a> &#x5B9E;&#x4F8B;&#x4E0B;&#x9762;&#x3002;&#xFF08;&#xFF0C;under the same Instumentation&#xFF09;. &#x6BCF;&#x4E2A;&#x6D4B;&#x8BD5;&#x7247;&#x4F7F;&#x7528;&#x4E00;&#x4E2A;&#x6570;&#x5B57;&#x7D22;&#x5F15;&#x6807;&#x8BB0;&#x3002;&#x5728;&#x8FD0;&#x884C;&#x6D4B;&#x8BD5;&#x65F6;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; <code>-e numShards</code>  &#x9009;&#x9879;&#x6765;&#x6307;&#x5B9A;&#x8981;&#x521B;&#x5EFA;&#x591A;&#x5C11;&#x4E2A;&#x6D4B;&#x8BD5;&#x7247;&#xFF0C;&#x4F7F;&#x7528; <code>-e shardIndex</code> &#x9009;&#x9879;&#x6765;&#x6307;&#x5B9A;&#x8981;&#x8FD0;&#x884C;&#x54EA;&#x4E00;&#x4E2A;&#x7247;&#x7684;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#x3002;</p>
<p>&#x4F8B;&#x5982;&#xFF0C;&#x4E3A;&#x4E86;&#x5C06;&#x6D4B;&#x8BD5;&#x5957;&#x4EF6;&#xFF08;test suite&#xFF09; &#x5206;&#x5272;&#x6210;&#x4E3A;10&#x7247;&#xFF0C;&#x5E76;&#x4E14;&#x53EA;&#x8FD0;&#x884C;&#x4F4D;&#x4E8E;&#x7B2C;&#x4E8C;&#x7247;&#x7684;&#x6D4B;&#x8BD5;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x4E00;&#x4E0B;&#x547D;&#x4EE4;&#xFF1A;</p>
<pre><code>adb shell am instrument -w -e numShards 10 -e shardIndex 2
</code></pre><p>&#x4F60;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x67E5;&#x770B; <a href="https://developer.android.com/reference/android/support/test/package-summary.html" target="_blank" rel="external">API reference</a> &#x6765;&#x4E86;&#x89E3;&#x66F4;&#x591A;&#x5173;&#x4E8E;&#x5982;&#x4F55;&#x4F7F;&#x7528;Android test runner &#x7684;&#x4FE1;&#x606F;&#x3002;</p>
<h3 id="espresso-&#x6846;&#x67B6;"><a href="#Espresso-&#x6846;&#x67B6;" class="headerlink" title="Espresso &#x6846;&#x67B6;"></a>Espresso &#x6846;&#x67B6;</h3><p>Espresso &#x6D4B;&#x8BD5;&#x6846;&#x67B6;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x7CFB;&#x5217;&#x7684;APIS &#x7528;&#x6765;&#x6784;&#x5EFA;&#x5355;&#x4E2A;&#x5E94;&#x7528;&#x5185;&#x6D4B;&#x8BD5;&#x7528;&#x6237;&#x4EA4;&#x4E92;&#x7684;UI&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#x3002; &#x5B83;&#x975E;&#x5E38;&#x4F7F;&#x7528;&#x6765;&#x4E86;&#x7F16;&#x5199;&#x767D;&#x76D2;&#x7C7B;&#x578B;&#x7684;&#x81EA;&#x52A8;&#x5316;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#xFF0C;&#x56E0;&#x4E3A;Espresso&#x6D4B;&#x8BD5;&#x4EE3;&#x7801;&#x5FC5;&#x987B;&#x4E86;&#x89E3;&#x5B9E;&#x73B0;&#x4EE3;&#x7801;&#x7684;&#x7EC6;&#x8282;&#x3002;</p>
<p>Espresso &#x6D4B;&#x8BD5;&#x6846;&#x67B6;&#x7684;&#x4E3B;&#x8981;&#x7279;&#x6027;&#x5305;&#x62EC;&#xFF1A;</p>
<ul>
<li>&#x4E00;&#x5957;&#x4E30;&#x5BCC;&#x7684;&#x89C6;&#x56FE;&#x548C;&#x9002;&#x914D;&#x5668;&#xFF08;View and Adapter&#xFF09;&#x5339;&#x914D;API&#x3002; &#x67E5;&#x770B; <a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#espresso-matching" target="_blank" rel="external">View matching</a> &#x4EE5;&#x4E86;&#x89E3;&#x66F4;&#x591A;&#x4FE1;&#x606F;&#x3002;</li>
<li>&#x4E00;&#x5957;&#x7528;&#x4EE5;&#x8FDB;&#x884C;&#x81EA;&#x52A8;&#x5316;UI&#x4EA4;&#x4E92;&#x7684;action APIs&#x3002; &#x67E5;&#x770B; <a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#espresso-actions" target="_blank" rel="external">Action APIs</a> &#x4EE5;&#x4E86;&#x89E3;&#x66F4;&#x591A;&#x3002;</li>
<li>&#x7528;&#x4EE5;&#x63D0;&#x9AD8;&#x6D4B;&#x8BD5;&#x53EF;&#x4FE1;&#x5EA6; &#x7684; UI &#x7EBF;&#x7A0B;&#x540C;&#x6B65;&#x673A;&#x5236;&#xFF0C;&#x67E5;&#x770B;  <a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#espresso-thread-sync" target="_blank" rel="external">UI thread synchronization</a> &#x4EE5;&#x83B7;&#x53D6;&#x66F4;&#x591A;&#x4FE1;&#x606F;&#x3002;</li>
</ul>
<p>&#x6CE8;&#xFF1A; &#x9700;&#x8981;Android2.2&#xFF08;API level 8&#xFF09; &#x6216;&#x8005;&#x66F4;&#x9AD8;&#x7248;&#x672C;</p>
<h4 id="view-matching"><a href="#View-matching" class="headerlink" title="View matching"></a>View matching</h4><p><a href="https://developer.android.com/reference/android/support/test/espresso/Espresso.html#onView(org.hamcrest.Matcher&lt;android.view.View" target="_blank" rel="external">Espresso.onView()
</a>)  &#x4F7F;&#x5F97;&#x4F60;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x76EE;&#x6807;app &#x91CC;&#x7684;UI &#x7EC4;&#x4EF6;&#x5E76;&#x4E14;&#x4E0E;&#x4E4B;&#x4EA4;&#x4E92;&#x3002; &#x8BE5;&#x65B9;&#x6CD5;&#x63A5;&#x6536;&#x4E00;&#x4E2A;<a href="http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/Matcher.html" target="_blank" rel="external">Matcher
</a> &#x53C2;&#x6570;&#xFF0C;&#x7136;&#x540E;&#x5728;&#x89C6;&#x56FE;&#x5C42;&#x6B21;&#x6811;&#x4E2D;&#x5B9A;&#x4F4D;&#x5230;&#x5339;&#x914D;&#x5230;&#x7684;&#x5BF9;&#x5E94;&#x7684;View&#x5B9E;&#x4F8B;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x7684;&#x5339;&#x914D;&#x6761;&#x4EF6;&#x6709;&#xFF1A;</p>
<ul>
<li>view &#x7684;&#x7C7B;&#x540D;</li>
<li>view &#x7684; content description</li>
<li>view &#x7684;<code>R.id</code></li>
<li>view &#x4E0A;&#x663E;&#x793A;&#x7684;&#x6587;&#x672C;</li>
</ul>
<p>&#x4F8B;&#x5982;&#xFF0C;&#x4E3A;&#x4E86;&#x5B9A;&#x4F4D;&#x5230;&#x4E00;&#x4E2A;ID &#x4E3A; <code>my_button</code> &#x7684;&#x6309;&#x94AE;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x6307;&#x5B9A;&#x5982;&#x4E0B;&#x7684;matcher&#xFF1A;</p>
<pre><code>onView(withId(R.id.my_button));
</code></pre><p>&#x5982;&#x679C;&#x641C;&#x7D22;&#x6210;&#x529F;&#xFF0C;onView() &#x65B9;&#x6CD5;&#x5C31;&#x4F1A;&#x8FD4;&#x56DE;&#x8BE5;View &#x7684;&#x4E00;&#x4E2A;&#x5F15;&#x7528;&#xFF0C;&#x7136;&#x540E;&#x4F60;&#x5C31;&#x53EF;&#x4EE5;&#x6267;&#x884C;actions &#x5E76;&#x4E14;&#x6D4B;&#x8BD5;&#x662F;&#x5426;&#x7B26;&#x5408;&#x9884;&#x671F;</p>
<h4 id="adapter-matching-&#x9002;&#x914D;&#x5668;&#x5339;&#x914D;"><a href="#Adapter-matching-&#x9002;&#x914D;&#x5668;&#x5339;&#x914D;" class="headerlink" title="Adapter matching - &#x9002;&#x914D;&#x5668;&#x5339;&#x914D;"></a>Adapter matching - &#x9002;&#x914D;&#x5668;&#x5339;&#x914D;</h4><p>&#x5728;&#x4E00;&#x4E2A; <a href="https://developer.android.com/reference/android/widget/AdapterView.html" target="_blank" rel="external">AdapterView</a><br>  &#x7684;&#x5E03;&#x5C40;&#x4E2D;&#xFF0C;&#x5E03;&#x5C40;&#x662F;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#x52A8;&#x6001;&#x6539;&#x53D8;&#x7684;&#x3002;&#x5982;&#x679C;&#x76EE;&#x6807;View &#x4F4D;&#x4E8E;&#x4E00;&#x4E2A;<a href="https://developer.android.com/reference/android/widget/AdapterView.html" target="_blank" rel="external">AdapterView</a> &#x7684;&#x5B50;&#x7C7B;&#x4E2D;&#xFF08;&#x5982; <a href="https://developer.android.com/reference/android/widget/ListView.html" target="_blank" rel="external">ListView</a><br> &#x6216;&#x8005; <a href="https://developer.android.com/reference/android/widget/GridView.html" target="_blank" rel="external">GridView</a>&#xFF09;&#xFF0C;&#x56E0;&#x4E3A;&#x5F53;&#x524D;&#x7684;&#x89C6;&#x56FE;&#x5C42;&#x6B21;&#x4E2D;&#x53EA;&#x52A0;&#x8F7D;&#x4E86;&#x4E00;&#x90E8;&#x5206;&#x5E03;&#x5C40;View&#xFF0C;&#x90A3;&#x4E48;onView() &#x65B9;&#x6CD5;&#x5C06;&#x65E0;&#x6CD5;&#x5DE5;&#x4F5C;&#x3002;</p>
<p>&#x8FD9;&#x65F6;&#xFF0C;&#x4F60;&#x5C31;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;  <a href="https://developer.android.com/reference/android/support/test/espresso/Espresso.html#onData(org.hamcrest.Matcher&lt;java.lang.Object" target="_blank" rel="external">Espresso.onData()
</a>) &#x65B9;&#x6CD5;&#x6765;&#x67E5;&#x627E;&#x76EE;&#x6807;View &#x3002;&#x8BE5;&#x65B9;&#x6CD5;&#x4F1A;&#x8FD4;&#x56DE;AdapterView&#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#xFF0C;&#x7136;&#x540E;&#x4F60;&#x53EF;&#x4EE5;&#x5728;&#x8BE5;&#x5143;&#x7D20;&#x4E0A;&#x8FDB;&#x884C; &#x7528;&#x6237;&#x64CD;&#x4F5C;&#x6A21;&#x62DF;&#x548C;&#x65AD;&#x8A00;&#xFF08;assertions&#xFF09;&#x64CD;&#x4F5C;&#x3002;</p>
<h4 id="action-apis"><a href="#Action-APIs" class="headerlink" title="Action APIs"></a>Action APIs</h4><p>&#x4E00;&#x822C;&#x4F60;&#x90FD;&#x662F;&#x901A;&#x8FC7;&#x5728;&#x4F60;&#x7684;app &#x7684;&#x7528;&#x6237;&#x754C;&#x9762;&#x8FDB;&#x884C;&#x4E00;&#x4E9B;&#x64CD;&#x4F5C;&#x4EE5;&#x6D4B;&#x8BD5;&#x4F60;&#x7684;&#x5E94;&#x7528;&#x3002;&#x800C;&#x4F7F;&#x7528;<a href="https://developer.android.com/reference/android/support/test/espresso/action/ViewActions.html" target="_blank" rel="external">ViewActions
</a> API &#x4F60;&#x5C06;&#x53EF;&#x4EE5;&#x975E;&#x5E38;&#x5BB9;&#x6613;&#x7684;&#x81EA;&#x52A8;&#x5316;&#x8FD9;&#x4E9B;&#x4EA4;&#x4E92;&#x64CD;&#x4F5C;&#x3002; &#x4F7F;&#x7528;&#x8FD9;&#x4E9B;API &#x4F60;&#x53EF;&#x4EE5;&#x6267;&#x884C;&#x7684;UI&#x64CD;&#x4F5C;&#x5982;&#x4E0B;&#xFF1A;</p>
<ul>
<li>View click = &#x89C6;&#x56FE;&#x70B9;&#x51FB;</li>
<li>Swipe = &#x6ED1;&#x52A8;</li>
<li>Key and button presses = &#x6309;&#x538B;&#x6309;&#x952E;&#x548C;&#x6309;&#x94AE;</li>
<li>Typing test = &#x8F93;&#x5165;&#x6587;&#x5B57;</li>
<li>Opeing a link =&#x6253;&#x5F00;&#x4E00;&#x4E2A;&#x94FE;&#x63A5;</li>
</ul>
<p>&#x4F8B;&#x5982;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x7F16;&#x5199;&#x4E00;&#x4E2A;&#x6D4B;&#x8BD5;&#x811A;&#x672C;&#x6765;&#x6A21;&#x62DF;&#x8F93;&#x5165;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x5E76;&#x4E14;&#x6309;&#x4E0B;&#x4E00;&#x4E2A;&#x6309;&#x94AE;&#x6765;&#x63D0;&#x4EA4;&#x8F93;&#x5165;&#x7684;&#x503C;&#x7684;&#x51E0;&#x4E2A;&#x52A8;&#x4F5C;&#x3002; <a href="https://developer.android.com/reference/android/support/test/espresso/ViewInteraction.html#perform(android.support.test.espresso.ViewAction..." target="_blank" rel="external">ViewInteraction.perform()
</a>) &#x548C; <a href="https://developer.android.com/reference/android/support/test/espresso/DataInteraction.html#perform(android.support.test.espresso.ViewAction..." target="_blank" rel="external">DataInteraction.perform()
</a>) &#x63A5;&#x53D7;&#x4E00;&#x4E2A;&#x6216;&#x591A;&#x4E2A;<a href="https://developer.android.com/reference/android/support/test/espresso/ViewAction.html" target="_blank" rel="external">ViewAction
</a> &#x53C2;&#x6570;&#xFF0C;&#x5E76;&#x4E14;&#x6309;&#x7167;&#x63D0;&#x4F9B;&#x4ED6;&#x4EEC;&#x7684;&#x6B21;&#x5E8F;&#x4F9D;&#x6B21;&#x6267;&#x884C;&#x8FD9;&#x4E9B;&#x52A8;&#x4F5C;&#x3002;</p>
<pre><code>// Type text into an EditText view, then close the soft keyboard
onView(withId(R.id.editTextUserInput))
    .perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard());

// Press the button to submit the text change
onView(withId(R.id.changeTextBt)).perform(click());
</code></pre><h4 id="ui-&#x7EBF;&#x7A0B;&#x540C;&#x6B65;"><a href="#UI-&#x7EBF;&#x7A0B;&#x540C;&#x6B65;" class="headerlink" title="UI &#x7EBF;&#x7A0B;&#x540C;&#x6B65;"></a>UI &#x7EBF;&#x7A0B;&#x540C;&#x6B65;</h4><p>&#x8FD0;&#x884C;&#x4E0E;android&#x8BBE;&#x5907;&#x7684;&#x6D4B;&#x8BD5;&#x7ECF;&#x5E38;&#x4F1A;&#x56E0;&#x4E3A;&#x65F6;&#x95F4;&#x95EE;&#x9898;&#x800C;&#x968F;&#x673A;&#x5931;&#x8D25;&#x3002; &#x8FD9;&#x4E2A;&#x95EE;&#x9898; &#x79F0;&#x4E4B;&#x4E3A; <em>test flakiness</em>&#x3002; &#x5728;&#x4F7F;&#x7528; Espresso&#x4E4B;&#x524D;&#xFF0C;&#x89E3;&#x51B3;&#x529E;&#x6CD5;&#x662F;&#x5728;&#x6D4B;&#x8BD5;&#x4EE3;&#x7801;&#x8BA9;&#x6D4B;&#x8BD5;sleep &#x8DB3;&#x591F;&#x957F;&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x6216;&#x8005;&#x52A0;&#x5165;&#x4E00;&#x4E2A;&#x8DB3;&#x591F;&#x957F;&#x7684;&#x8D85;&#x65F6;&#x65F6;&#x95F4;&#x53C8;&#x6216;&#x8005;&#x6DFB;&#x52A0;&#x5931;&#x8D25;&#x65F6;&#x4E0D;&#x505C;&#x5C1D;&#x8BD5;&#x7684;&#x4EE3;&#x7801;&#x3002; &#x7136;&#x800C;&#xFF0C;Espresso &#x6D4B;&#x8BD5;&#x6846;&#x67B6;&#x66FF;&#x4F60;&#x5904;&#x7406;&#x4E86;<a href="https://developer.android.com/reference/android/app/Instrumentation.html" target="_blank" rel="external">Instrumentation</a><br>&#x548C; UI &#x7EBF;&#x7A0B;&#x95F4;&#x7684;&#x540C;&#x6B65;&#x95EE;&#x9898;&#xFF0C;&#x8FD9;&#x5C06;&#x662F;&#x4F60;&#x7684;&#x6D4B;&#x8BD5;action&#x548C;&#x6D4B;&#x8BD5;&#x65AD;&#x8A00;&#x66F4;&#x52A0;&#x5177;&#x6709;&#x53EF;&#x4FE1;&#x5EA6;&#x3002;<br>&#x5B66;&#x4E60; <a href="https://developer.android.com/reference/android/support/test/package-summary.html" target="_blank" rel="external">API reference</a> &#x548C; <a href="https://developer.android.com/training/testing/ui-testing/espresso-testing.html" target="_blank" rel="external">Testing UI for a Single App</a> &#x4EE5;&#x4E86;&#x89E3;&#x66F4;&#x591A;.</p>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
<hr>
<p>&#x539F;&#x6587;&#x94FE;&#x63A5;&#xFF1A;<a href="https://developer.android.com/topic/libraries/testing-support-library/index.html#AndroidJUnitRunner" target="_blank" rel="external">Android Testing Support</a></p>
<p><strong>&#x8BF4;&#x660E;</strong>&#xFF1A;1. &#x6240;&#x6709;&#x94FE;&#x63A5;&#x6307;&#x5411;&#x539F;&#x59CB;&#x94FE;&#x63A5;&#xFF1B; 2 .  &#x90E8;&#x5206;&#x540D;&#x8BCD;&#x4FDD;&#x7559;&#x82F1;&#x6587;</p>

    
  </div>
</article>

</div>


  <div class="text-center donation">
    <div class="inner-donation">
      <span class="btn-donation">支持一下</span>
      <div class="donation-body">
        <div class="tip text-center">扫一扫，支持HanlyJiang</div>
        <ul class="theme.donation.items.length">
        
          <li class="item">
            <img src="/images/qr-wechat.png" alt="">
          </li>
        
          <li class="item">
            <img src="/images/qr_zhifubao.jpg" alt="">
          </li>
        
        </ul>
      </div>
    </div>
  </div>




  <a id="backTop" class="back-top">
    <i class="icon-angle-up"></i>
  </a>




  <div class="modal" id="modal">
  <span id="cover" class="cover hide"></span>
  <div id="modal-dialog" class="modal-dialog hide-dialog">
    <div class="modal-header">
      <span id="close" class="btn-close">关闭</span>
    </div>
    <hr>
    <div class="modal-body">
      <ul class="list-toolbox">
        
          <li class="item-toolbox">
            <a
              class="ROUND_RECT"
              href="/archives/"
              rel="noopener noreferrer"
              target="_self"
              >
              博客
            </a>
          </li>
        
          <li class="item-toolbox">
            <a
              class="ROUND_RECT"
              href="/category/"
              rel="noopener noreferrer"
              target="_self"
              >
              分类
            </a>
          </li>
        
          <li class="item-toolbox">
            <a
              class="ROUND_RECT"
              href="/tag/"
              rel="noopener noreferrer"
              target="_self"
              >
              标签
            </a>
          </li>
        
          <li class="item-toolbox">
            <a
              class="ROUND_RECT"
              href="/about/"
              rel="noopener noreferrer"
              target="_self"
              >
              关于
            </a>
          </li>
        
          <li class="item-toolbox">
            <a
              class="ROUND_RECT"
              href="/atom.xml"
              rel="noopener noreferrer"
              target="_blank"
              >
              RSS
            </a>
          </li>
        
          <li class="item-toolbox">
            <a
              class="ROUND_RECT"
              href="/search/"
              rel="noopener noreferrer"
              target="_self"
              >
              搜索
            </a>
          </li>
        
      </ul>

    </div>
  </div>
</div>



  
      <div class="fexo-comments comments-post">
    
  <section class="disqus-comments">
    <div id="disqus_thread">
      <noscript>Please enable JavaScript to view the <a href="//disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
    </div>
  </section>

  <script>
    var disqus_shortname = 'forsigner';
    
    var disqus_url = 'http://hanlyjiang.github.io/2016/08/03/Android测试支持库01/';
    
    (function(){
      var dsq = document.createElement('script');
      dsq.type = 'text/javascript';
      dsq.async = true;
      dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
      (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
    })();
  </script>

  <script id="dsq-count-scr" src="//forsigner.disqus.com/count.js" async></script>



    




  </div>

  

  <script type="text/javascript">
  function loadScript(url, callback) {
    var script = document.createElement('script')
    script.type = 'text/javascript';

    if (script.readyState) { //IE
      script.onreadystatechange = function() {
        if (script.readyState == 'loaded' ||
          script.readyState == 'complete') {
          script.onreadystatechange = null;
          callback();
        }
      };
    } else { //Others
      script.onload = function() {
        callback();
      };
    }

    script.src = url;
    document.getElementsByTagName('head')[0].appendChild(script);
  }

  window.onload = function() {
    loadScript('/js/bundle.js?235683', function() {
      // load success
    });
  }
</script>

</body>
</html>
